package cn.com.w.redis.template.demo.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Random;

@RestController
@RequestMapping("/number")
public class NumberController {

    @Autowired
    private RedisTemplate redisTemplate;


    @PostMapping("/increment")
    public void increment() {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        Long increment = valueOperations.increment("increment");
        if (increment > 150L) {
            System.out.println("已售卖150份，停止售卖。");
        } else {
            valueOperations.increment("saleNum");
            System.out.println("售卖=" + increment);
            return;
        }
    }

    /**
     * Random类产生随机数，每个数的出现概率都是相同的；
     * Random类产生随机数是有相同规律在产生，并不是正真的随机（伪随机），
     * 例如Random r1 = new Random();是默认当前系统时间的毫秒数作为种子数；
     * Random r1 = new Random(10);是指定种子为10的Random对象，相当于选择了一种规则，但一种规则里面的产生随机数的方法/规律一固定的。
     */
    @PostMapping("/random")
    public void random() {
        System.out.println(random_non());
    }

    /**
     * 不等概率随机数
     * 例：掷骰子 1点10%、2点15%。3点20%、4点25%、5点15%、6点15%
     *
     * @return
     */
    private static int random_non() {
        // 结果
        int result = 0;
        // 随机产生[0,100)的整数，每个数字出现的概率为1%
        int a = new Random().nextInt(100);
        if (a < 10) {
            // 10个数字 的区间，代表10%的概率。
            result = 1;
        } else if (a < 25) {
            // [10, 25)，15个数字 的区间，代表15%的概率。
            result = 2;
        } else if (a < 45) {
            // [25, 45)，20个数字 的区间，代表20%的概率。
            result = 3;
        } else if (a < 70) {
            // [45, 70)，25个数字 的区间，代25%的概率。
            result = 4;
        } else if (a < 85) {
            // [70, 85)，15个数字 的区间，代15%的概率。
            result = 5;
        } else {
            // [85, 100)，15个数字 的区间，代15%的概率。
            result = 6;
        }
        return result;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            System.out.println(random_non());
        }
    }
}
